#ifndef TEXTPROCESS_H
#define TEXTPROCESS_H

#include <QMainWindow>
#include <QLabel>
#include <QMenu>
#include <QMenuBar>
#include <QAction>
#include <QComboBox>
#include <QSpinBox>
#include <QToolBar>
#include <QFontComboBox>
#include <QToolButton>
#include <QTextCharFormat>
#include <QApplication>

#include "showwidget.h"

class TextProcess : public QMainWindow
{
    Q_OBJECT

public:
    TextProcess(QWidget *parent = 0);
    ~TextProcess();

    void createActions();   //创建动作
    void createMenus(); //创建菜单
    void createToolBars();  //创建工具栏
    void loadFile(QString filename);    //读取文件操作函数
    void mergeFormat(QTextCharFormat);    //获取当前光标选择的内容部分

protected slots:
    void ShowNewFile();    //新建文件槽函数
    void ShowOpenFile();    //打开文件槽函数
    void ShowPrintText();    //打印文本槽函数
    void ShowPrintImage();    //打印图像槽函数
    void ShowZoomIn();    //放大图像
    void ShowZoomOut();    //缩小图像
    void ShowRotate90();    //顺时针旋转90度
    void ShowRotate180();    //顺时针旋转180度
    void ShowRotate270();    //顺时针旋转270度
    void ShowMirrorVertical();    //图像横向镜像操作
    void ShowMirrorHorizontal();    //图像垂直镜像操作
    void ShowAbout();    //显示关于Qt消息框

    void ShowFontComboBox(QString comboStr);    //字体类型响应函数
    void ShowSizeSpinBox(QString spinValue);    //字体大小响应函数
    void ShowBoldBtn();    //文本加粗操作
    void ShowItalicBtn();    //文本斜体操作
    void ShowUnderlineBtn();    //文本下划线操作
    void ShowColorBtn();    //文本颜色修改操作
    void ShowCurrentFormatChanged(const QTextCharFormat &fmt);    //当前文本格式修改响应

    void ShowList(int);    //排序响应
    void ShowAlignment(QAction *act);    //文本对齐设置
    void ShowCursorPoitionChanged();    //当前光标改变槽函数

private:

    ShowWidget *showWidget;

    QImage img;    //操作图像对象
    QString fileName;    //被操作的文件名

    //菜单栏控件声明
    QMenu *fileMenu;    //文件菜单栏控件
    QMenu *zoomMenu;    //缩放菜单栏控件
    QMenu *rotateMenu;    //旋转菜单栏控件
    QMenu *mirrorMenu;    //镜像菜单栏控件

    //动作控件声明
    QAction *openFileAction;    //打开文件动作控件
    QAction *NewFileAction;    //新建文件动作控件
    QAction *PrintTextAction;    //打印文本动作控件
    QAction *PrintImageAction;    //打印图像动作控件
    QAction *exitAction;    //退出程序动作控件
    QAction *copyAction;    //复杂动作控件
    QAction *cutAction;        //剪切动作控件
    QAction *pasteAction;    //粘贴动作控件
    QAction *aboutAction;    //显示关于 Qt 消息框动作控件
    QAction *zoomInAction;    //放大动作控件
    QAction *zoomOutAction;    //缩小动作控件
    QAction *rotate90Action;    //旋转90度动作控件
    QAction *rotate180Action;    //旋转180度动作控件
    QAction *rotate270Action;    //旋转270度动作控件
    QAction *mirrorVerticalAction;    //横向镜像动作控件
    QAction *mirrorHorizontalAction;    //垂直镜像动作控件
    QAction *undoAction;    //撤销动作控件
    QAction *redoAction;    //重做动作控件

    //工具栏控件声明
    QToolBar *fileTool;        //文件操作工具栏控件
    QToolBar *zoomTool;        //镜像操作工具栏控件
    QToolBar *rotateTool;    //旋转操作工具栏控件
    QToolBar *mirrorTool;    //镜像操作工具栏控件
    QToolBar *doToolBar;    //撤销和重做工具栏

    //文本操作相关控件，并没有放置到菜单栏中
    QLabel *fontLabel1;    //字体型号标签
    QFontComboBox *fontComboBox;    //字体型号选择控件
    QLabel *fontLabel2;        //字体大小标签
    QComboBox *sizeComboBox;    //字体大小选择控件
    QToolButton *boldBtn;    //字体加粗工具栏按钮控件
    QToolButton *italicBtn;    //字体斜体工具栏按钮控件
    QToolButton *underlineBtn;    //下划线工具栏按钮控件
    QToolButton *colorBtn;        //字体颜色设置工具栏按钮控件
    QToolBar *fontToolBar;        //字体工具栏控件声明

    //文本对齐操作相关控件
    QLabel *listLabel;  //排序设置项
    QComboBox *listComboBox;    //排序按钮组合控件
    QActionGroup *actGrp;    //动作组合对象
    QAction *leftAction;    //左对齐动作控件声明
    QAction *rightAction;    //右对齐动作控件声明
    QAction *centerAction;    //居中对齐动作控件声明
    QAction *justifyAction;        //两端对齐动作控件声明
    QToolBar *listToolBar;    //对齐工具栏控件声明

};

#endif // TEXTPROCESS_H
